// index.js
import http from '../../utils/request';  // ✅ 使用封装后的请求模块
import { baseUrl } from '../../config/config.js';

Page({
  data: {
    file: null,
    formattedSize: '',
    employeeNumber: '',
    isUploading: false,
    uploadTask: null,
    customers: [],      // 客户数据
    isLoading: false    // 加载状态
  },

  // ====================== 生命周期方法 ======================
  onShow() {
    const userInfo = wx.getStorageSync('userInfo')
    if (userInfo) {
      this.setData({ 
        employeeNumber: userInfo.employee_number 
      }, () => {
        this.loadCustomers(); // 页面显示时加载数据
      });
    }
  },

  // ====================== 文件操作 ======================
  chooseFile() {
    wx.chooseMessageFile({
      count: 1,
      type: 'file',
      extension: ['xls', 'xlsx'],
      success: (res) => {
        const file = res.tempFiles[0]
        if (!file.name.endsWith('.xls') && !file.name.endsWith('.xlsx')) {
          this.showToast('仅支持xls/xlsx文件', 'error')
          return
        }
        
        this.setData({
          file,
          formattedSize: (file.size / 1024).toFixed(2) + 'KB'
        })
      }
    })
  },

  // ====================== 上传接口改造 ======================
  uploadFile() {
    const { file, employeeNumber } = this.data
    
    if (!employeeNumber) {
      this.showToast('请先登录', 'error')
      return
    }
    
    if (!file) {
      this.showToast('请选择文件', 'error')
      return
    }

    this.setData({ isUploading: true })
  
    wx.showLoading({ title: '上传中...', mask: true })
    
    // ✅ 使用封装的请求配置获取请求头
    const header = this.generateUploadHeaders()

    const uploadTask = wx.uploadFile({
      url: `${baseUrl}/upload`,  // 使用配置的baseUrl
      filePath: file.path,
      name: 'excel',
      formData: { employee_number: employeeNumber },
      header,  // ✅ 使用统一生成的请求头
      success: (res) => {
        setTimeout(() => {
          try {
            const result = JSON.parse(res.data)
            // ✅ 标准化响应处理
            if (result?.status === 'success') {
              this.showToast(`成功上传${result.count}条数据`, 'success')
              this.resetFile()
              this.loadCustomers()
            } else {
              this.showToast(result?.message || '上传失败', 'error')
            }
          } catch (e) {
            this.showToast('服务器响应异常', 'error')
          }
        }, 300)
      },
      fail: (err) => {
        setTimeout(() => {
          const msg = err.errMsg.includes('abort') ? '上传已取消' : '网络连接失败'
          this.showToast(msg, 'error')
        }, 300)
      },
      complete: () => {
        this.setData({ isUploading: false })
        wx.hideLoading()
      }
    })
    
    this.setData({ uploadTask })
  },

  // ====================== 数据加载接口改造 ======================
  async loadCustomers() {
    if (!this.data.employeeNumber) return;

    console.log('[DEBUG] 开始加载数据，员工号:', this.data.employeeNumber);
    this.setData({ isLoading: true });

    try {
      // ✅ 使用封装后的GET方法
      const res = await http.get('/customers', {
        employee_number: this.data.employeeNumber
      });

      console.log('[DEBUG] 接口响应:', res);
      if (res?.status === 'success') {
        console.log('[DEBUG] 有效数据:', res.data);
        this.setData({ customers: res.data || [] });
      } else {
        console.error('[ERROR] 接口异常:', res);
        this.showToast(res?.message || '数据加载失败', 'error');
      }
    } catch (err) {
      console.error('[ERROR] 请求失败:', err);
      this.showToast(err.message || '网络连接失败', 'error');
    } finally {
      console.log('[DEBUG] 请求完成');
      this.setData({ isLoading: false });
    }
  },

  // ====================== 辅助方法 ======================
  generateUploadHeaders() {
    // ✅ 与请求拦截器保持一致的认证逻辑
    const token = getApp().globalData.token || ''
    return {
      'Content-Type': 'multipart/form-data',
      'Authorization': `Bearer ${token}`,
    }
  },

  cancelUpload() {
    if (this.data.uploadTask) {
      this.data.uploadTask.abort()
      this.setData({ 
        isUploading: false,
        uploadTask: null
      })
      this.showToast('上传已取消', 'info')
    }
  },

  resetFile() {
    this.setData({ 
      file: null,
      formattedSize: ''
    })
  },

  showToast(title, type = 'none') {
    wx.hideToast()
    clearTimeout(this.toastTimer)
    
    this.toastTimer = setTimeout(() => {
      wx.showToast({
        title,
        icon: type === 'success' ? 'success' : 'none',
        duration: 3000,
        mask: true
      })
    }, 150)
  }
})